/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.dmz.seguridad.ejb.dao;

import ec.dmz.seguridad.ejb.generico.Generico;
import ec.dmz.seguridad.ejb.model.Opcion;
import ec.dmz.seguridad.ejb.model.Perfil;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;
/**
 *
 * @author Estiwar
 */
@LocalBean
@Stateless
public class OpcionDao extends Generico<Opcion> {
     public OpcionDao() {
        super(Opcion.class);
    }

    public List<Opcion> listarPorAplicacion() throws Exception {
        String jpaQl = "SELECT m FROM Opcion m"
                + " WHERE m.menu IS NULL AND m.aplicacion = :aplicacion ORDER BY m.orden";
        Query query = getEntityManager().createQuery(jpaQl);
        //query.setParameter("aplicacion", aplicacion);
        return query.getResultList();
    }

    public List<Opcion> listarPorOpcionPadre(Opcion menu) throws Exception {
        String jpaQl = "SELECT m FROM Opcion m"
                + " WHERE m.menu = :menu ORDER BY m.orden";
        Query query = getEntityManager().createQuery(jpaQl);
        query.setParameter("menu", menu);
        return query.getResultList();
    }

    public List<Opcion> listarPorOpcionPadreNodoFinal(Opcion menu, boolean nodoFinal) throws Exception {
        String jpaQl = "SELECT m FROM Opcion m"
                + " WHERE m.menu = :menu AND m.nodoFinal = :nodoFinal ORDER BY m.orden";
        Query query = getEntityManager().createQuery(jpaQl);
        query.setParameter("menu", menu);
        query.setParameter("nodoFinal", nodoFinal);
        return query.getResultList();
    }

    public List<Opcion> listarPorPerfil(List<Perfil> listaPerfil) throws Exception {
        int i = 1;
        String concatena = "";
        for (Perfil l : listaPerfil) {
            if (i != listaPerfil.size()) {
                concatena = concatena.concat(l.getPerCodigo().toString().concat(","));
            } else {
                concatena = concatena.concat(l.getPerCodigo().toString() + "");
            }
            i++;
        }
        String jpaQl = "SELECT ac FROM Opcion ac, PerfilOpcion ar"
                + " WHERE ac.opcCodigo = ar.opcCodigo.opcCodigo"
                + " AND ar.perCodigo.perCodigo in (" + concatena + ") AND ac.opcEstado = 1"
                + " ORDER BY ac.opcOrden";
        Query query = getEntityManager().createQuery(jpaQl);
        return query.getResultList();
    }

    public Opcion obtenerOpcion() {
        try {
            String jpaQl = "SELECT o FROM Opcion o WHERE o.opcEstado = 1 and opcNivel = 1";
            Query query = getEntityManager().createQuery(jpaQl);           
            return (Opcion) query.getSingleResult();
        } catch (Exception e) {
            return null;
        }
    }
}
